跳转至

188_CRISPR off-target分析

一句话概述

CRISPR off-target分析评估guide RNA在基因组中的非预期切割位点,通过计算预测(Cas-OFFinder、CRISPOR)和实验检测(GUIDE-seq、Digenome-seq)两种路线识别脱靶效应,是基因编辑安全性评估的核心环节。

核心知识点表格

知识点说明
脱靶定义gRNA与非目标位点错配但仍被Cas蛋白切割
脱靶影响因素错配数量、位置(seed vs non-seed)、错配类型
Seed区域PAM近端8-12nt,对结合特异性最关键
计算预测工具Cas-OFFinder、CRISPOR、CRISPRscan
实验检测方法GUIDE-seq、CIRCLE-seq、Digenome-seq、DISCOVER-seq
CFD分数Cutting Frequency Determination score,衡量脱靶活性
MIT特异性分数综合所有潜在脱靶位点的整体特异性评分
高保真Cas变体SpCas9-HF1、eSpCas9、HiFi Cas9等降低脱靶

步骤详解

第一步:理解脱靶机制

白话解释:CRISPR像一把带导航的剪刀,gRNA是导航,Cas9是剪刀。但导航不是100%精确,如果基因组某处的序列与目标相似(有几个碱基不同),剪刀也可能错误地在那里切割。

技术细节:Cas9通过PAM识别和gRNA互补配对进行靶向。PAM近端的seed区域(8-12nt)对结合亲和力影响最大。一般认为1-3个错配可容忍,但具体取决于错配位置。DNA/RNA bulge(插入缺失型错配)也可能导致脱靶。

第二步:使用Cas-OFFinder进行脱靶预测

白话解释:Cas-OFFinder是一个搜索工具,在全基因组中搜索所有与gRNA相似的位点,告诉你哪些地方可能发生脱靶。

# 安装Cas-OFFinder
# 下载:http://www.rgenome.net/cas-offinder/

# 准备输入文件
cat << 'EOF' > input.txt
/path/to/hg38.fa
NNNNNNNNNNNNNNNNNNNNNGG
ACGTACGTACGTACGTACGTNNN 5
EOF
# 第1行:参考基因组路径
# 第2行:PAM模式(NGG for SpCas9)
# 第3行:gRNA序列 + 最大错配数

# 运行Cas-OFFinder
cas-offinder input.txt C output.txt
# C = CPU模式, G = GPU模式

# 输出格式
# Bulge_type  crRNA  DNA  Chromosome  Position  Direction  Mismatches  Bulge_Size
head output.txt

# 高级用法:允许DNA/RNA bulge
cat << 'EOF' > input_bulge.txt
/path/to/hg38.fa
NNNNNNNNNNNNNNNNNNNNNGG
ACGTACGTACGTACGTACGTNNN 4 1
EOF
# 最后两个数字:最大错配数 最大bulge大小

第三步:使用CRISPOR进行综合评估

白话解释:CRISPOR是一个综合性工具,不仅搜索脱靶位点,还给每个gRNA打分(特异性分数和效率分数),帮你选择最好的gRNA设计。

# CRISPOR命令行版
# 安装
pip install crispor

# 运行(也可使用Web版:http://crispor.tefor.net/)
crispor.py \
    hg38 \
    ACGTACGTACGTACGTACGT \
    NGG \
    --output crispor_output.tsv

# 输出包含:
# - MIT特异性分数(0-100,越高越特异)
# - CFD分数(每个脱靶位点的切割频率预测)
# - 脱靶位点列表及详细信息
# - gRNA效率评分
# Python中使用CRISPOR API
import requests

def query_crispor(sequence, genome='hg38', pam='NGG'):
    """查询CRISPOR网站获取gRNA评估"""
    url = "http://crispor.tefor.net/crispor.py"
    params = {
        'seq': sequence,
        'org': genome,
        'pam': pam
    }
    # 注意:实际使用应遵循CRISPOR的API使用条款
    response = requests.get(url, params=params)
    return response.text

# 解析Cas-OFFinder结果
import pandas as pd

offtargets = pd.read_csv("output.txt", sep="\t", header=None,
                          names=["BulgeType", "crRNA", "DNA", "Chrom",
                                 "Position", "Strand", "Mismatches", "BulgeSize"])

# 统计脱靶分布
print("按错配数分布:")
print(offtargets['Mismatches'].value_counts().sort_index())

# 过滤高风险脱靶(≤3错配)
high_risk = offtargets[offtargets['Mismatches'] <= 3]
print(f"\n高风险脱靶位点数(≤3错配): {len(high_risk)}")
print(high_risk[['Chrom', 'Position', 'Strand', 'Mismatches', 'DNA']])

第四步:CFD分数计算

白话解释:CFD分数量化每个脱靶位点实际被切割的可能性。它考虑了每个位置的每种错配类型的影响,分数越低脱靶风险越小。

# CFD分数计算
import numpy as np

# Doench 2016论文中的CFD权重矩阵(简化版)
# 每个位置每种错配的权重
def calc_cfd_score(guide, offtarget):
    """计算CFD分数"""
    assert len(guide) == len(offtarget) == 20  # 不含PAM

    # 位置权重(近PAM端权重更高)
    # 实际CFD矩阵更复杂,这里简化
    position_weights = {
        1: 0.0, 2: 0.0, 3: 0.014, 4: 0.0, 5: 0.0,
        6: 0.395, 7: 0.317, 8: 0.0, 9: 0.389, 10: 0.079,
        11: 0.445, 12: 0.508, 13: 0.613, 14: 0.851, 15: 0.732,
        16: 0.828, 17: 0.615, 18: 0.804, 19: 0.685, 20: 0.583
    }

    score = 1.0
    for i in range(20):
        if guide[i] != offtarget[i]:
            pos = i + 1
            # 错配降低分数
            score *= (1 - position_weights.get(pos, 0.5))

    return score

# 示例
guide = "ACGTACGTACGTACGTACGT"
ot1 = "ACGTACGTACGTACGTACGA"  # 1个错配在位置20
ot2 = "ACGTACGTACGTACGTAAGT"  # 1个错配在位置17

print(f"OT1 CFD score: {calc_cfd_score(guide, ot1):.4f}")
print(f"OT2 CFD score: {calc_cfd_score(guide, ot2):.4f}")

第五步:实验方法概览

白话解释:计算预测只是估计,要真正知道哪些位点被切了,需要实验验证。GUIDE-seq是金标准方法。

# 主要实验检测方法对比

## GUIDE-seq(Genome-wide Unbiased Identification of DSBs Evaluated by Sequencing)
- 原理:将短双链寡核苷酸(dsODN)整合到Cas9切割位点
- 优势:全基因组无偏检测,灵敏度高
- 限制:需要在活细胞中进行

## CIRCLE-seq(Circularization for In vitro Reporting of Cleavage Effects by Sequencing)
- 原理:体外环化基因组DNA后用Cas9切割
- 优势:无需细胞转染,灵敏度极高
- 限制:体外条件可能高估脱靶

## Digenome-seq(Digitized genome sequencing)
- 原理:体外用Cas9消化基因组DNA后测序
- 优势:简单直接
- 限制:需要高深度测序

## DISCOVER-seq
- 原理:检测MRE11蛋白在切割位点的结合
- 优势:检测细胞内真实切割
- 限制:需要特殊抗体和ChIP-seq

第六步:脱靶结果可视化

import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import numpy as np

# 可视化gRNA与脱靶位点的比对
def visualize_alignment(guide, offtargets_df, output_file="offtarget_vis.png"):
    fig, ax = plt.subplots(figsize=(14, len(offtargets_df)*0.5 + 2))

    guide_display = list(guide)
    y_pos = len(offtargets_df)

    # 画gRNA
    for i, nt in enumerate(guide_display):
        ax.text(i, y_pos + 1, nt, ha='center', va='center', fontsize=10,
                fontweight='bold', color='black',
                bbox=dict(boxstyle='round', facecolor='lightblue', alpha=0.8))
    ax.text(-2, y_pos + 1, 'gRNA', ha='right', va='center', fontweight='bold')

    # 画每个脱靶位点
    for idx, (_, row) in enumerate(offtargets_df.iterrows()):
        ot_seq = list(row['DNA'][:20])  # 不含PAM
        y = y_pos - idx

        for i, (g, o) in enumerate(zip(guide_display, ot_seq)):
            color = 'lightgreen' if g == o else 'salmon'
            ax.text(i, y, o, ha='center', va='center', fontsize=9,
                    bbox=dict(boxstyle='round', facecolor=color, alpha=0.7))

        label = f"OT{idx+1} ({row['Mismatches']}mm) {row['Chrom']}:{row['Position']}"
        ax.text(-2, y, label, ha='right', va='center', fontsize=8)

    ax.set_xlim(-8, 22)
    ax.set_ylim(-0.5, y_pos + 2.5)
    ax.axis('off')
    ax.set_title('Off-target Alignment Visualization', fontsize=14)

    plt.tight_layout()
    plt.savefig(output_file, dpi=300, bbox_inches='tight')

# 使用示例
# visualize_alignment("ACGTACGTACGTACGTACGT", high_risk)

实战命令速查

# Cas-OFFinder搜索脱靶(GPU加速)
cas-offinder input.txt G output.txt

# CRISPOR Web API(推荐Web版)
# http://crispor.tefor.net/

# FlashFry(快速gRNA设计+脱靶预测)
java -jar FlashFry.jar index --tmpLocation tmp/ --database hg38.fa --output hg38_db
java -jar FlashFry.jar discover --database hg38_db --fasta target.fa --output guides.tsv
java -jar FlashFry.jar score --input guides.tsv --output scored.tsv --scoringMetrics doench2014,doench2016,dangerous

# CRISPRitz(允许bulge的脱靶搜索)
crispritz.py search hg38/ guide.txt PAM.txt output/ --mm 6 --bDNA 2 --bRNA 2 -t

面试常问点

Q1: 影响CRISPR脱靶的主要因素有哪些? A: (1)错配数量:错配越多脱靶概率越低;(2)错配位置:seed区域(PAM近端8-12nt)的错配影响更大;(3)错配类型:rG:dT wobble配对脱靶风险较高;(4)gRNA序列组成:GC含量影响结合稳定性;(5)Cas蛋白浓度和递送方式:RNP递送比质粒递送脱靶更少。

Q2: MIT特异性分数和CFD分数的区别? A: MIT分数是综合指标,考虑所有潜在脱靶位点的加权总和,反映gRNA的整体特异性。CFD分数针对每个具体的脱靶位点,预测该位点被切割的相对概率。MIT分数用于选择gRNA,CFD分数用于评估具体脱靶位点的风险。

Q3: 如何降低CRISPR脱靶效应? A: (1)选择高特异性gRNA(MIT>70);(2)使用高保真Cas变体(SpCas9-HF1, eSpCas9);(3)使用RNP递送替代质粒递送;(4)降低Cas9浓度或缩短作用时间;(5)使用截短gRNA(17-18nt而非20nt);(6)使用配对Cas9 nickase(需两个gRNA同时结合)。

Q4: 计算预测和实验检测的优缺点? A: 计算预测快速便宜但可能遗漏不规则脱靶(如bulge型),也无法准确预测实际切割效率。实验检测提供真实的脱靶图谱但昂贵耗时。最佳策略是先计算筛选候选位点,再对高风险位点进行实验验证。

Q5: 基因治疗中脱靶分析的标准是什么? A: FDA要求基因治疗产品进行全面的脱靶评估,包括:(1)计算预测(至少2种工具);(2)至少一种无偏全基因组实验方法(如GUIDE-seq);(3)对top脱靶位点进行靶向深度测序验证;(4)在治疗靶细胞中评估(而非替代细胞系)。

易错点

  1. 忽略DNA/RNA bulge:只搜索错配不搜索bulge会遗漏重要脱靶位点
  2. PAM模式设置错误:SpCas9用NGG,Cpf1用TTTN,不同Cas蛋白PAM不同
  3. 参考基因组版本不匹配:gRNA设计和脱靶搜索应使用相同版本的基因组
  4. 过度依赖计算预测:计算工具的预测值和实际切割活性相关性有限
  5. 忽略个体基因组变异:参考基因组上的脱靶位点在患者基因组中可能因SNP而不同

补充知识

高保真Cas9变体

变体改造策略脱靶降低活性保留
SpCas9-HF1降低非特异DNA接触~10倍~90%
eSpCas9(1.1)降低非靶链结合~10倍~85%
HiFi Cas9单点突变R691A~5倍~95%
evoCas9定向进化~50倍~80%
Sniper-Cas9正负筛选进化~20倍~90%